import shutil

from forms.config import app_dist,basePath
# app_dist={
# "HOST": "172.24.0.168", "PORT": 3306, "USER": "root", "PASSWORD": "123456", "DATABASE": "安徽九合堂",
# }
import  datetime,os,json
import pymysql
import sqlite3
class 操作_sql_1():
    def __init__(self):
        # 打开数据库连接
        try:
            self.db = pymysql.connect(host=app_dist['HOST'],
                                 user=app_dist['USER'],
                                 password=app_dist['PASSWORD'],
                                 database=app_dist['DATABASE'])
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = self.db.cursor()

        except:
            try:
                if app_dist['HOST'] == '172.24.0.168':
                    app_dist['HOST'] = '127.0.0.1'
                else:
                    app_dist['HOST'] = '172.24.0.168'
                self.db = pymysql.connect(host=app_dist['HOST'],
                                 user=app_dist['USER'],
                                 password=app_dist['PASSWORD'],
                                 database=app_dist['DATABASE'])

            except:
                self.db=False



    def query_one(self,sql,params=(),cursor_type=None):
        db=self.db
        if db:
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = db.cursor()
            try:
                # 使用 execute()  方法执行 SQL 查询
                cursor.execute(sql,params)
            except Exception as e:
                return False, f"数据连接错误{e}", "", ""

            # 使用 fetchone() 方法获取单条数据.
            data = cursor.fetchall()
            #获取字段名称
            fields=[field[0] for field in cursor.description]

            # 关闭数据库连接
            db.close()
            # bool,message,data

            return True,"成功",data,fields
        else:
            return False,"数据连接错误","",""
    def alt_one(self,sql,params=()):
        db=self.db
        if db:
            # 使用cursor()方法获取操作游标
            cursor = db.cursor()

            # SQL 插入语句
            try:
                # 执行sql语句
                cursor.execute(sql,params)
                # 提交到数据库执行
                db.commit()
                # 关闭数据库连接
                db.close()
                return True, f"执行成功"
            except Exception as e:
                # 如果发生错误则回滚
                db.rollback()
                # 关闭数据库连接
                db.close()
                return False, f"执行失败\n代码为{e}"


    def alt_many(self,sql_all):
        db = self.db
        if db:
            # 使用cursor()方法获取操作游标
            cursor = db.cursor()

            # SQL 插入语句
            try:
                # 执行sql语句
                for sql in sql_all:
                    cursor.execute(sql[0],sql[1])
                # 提交到数据库执行
                db.commit()
                # 关闭数据库连接
                db.close()
                return True, f"执行成功"
            except Exception as e:
                # 如果发生错误则回滚
                db.rollback()
                # 关闭数据库连接
                db.close()
                return False, f"执行失败\n代码为{e}"

    def backup(self):
        '''备份'''
        if app_dist['BACKUPID']=='127.0.0.1':
            lasttime = app_dist['LASTBACKUPTIME']
            #获取当前时间比备份时间晚5天就备份一次
            if (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y-%m-%d_%H-%M-%S') >= lasttime:
                # 获取当前时间
                now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')

                backup_folder=basePath+'/backup_folder'
                db_name=app_dist['DATABASE']
                db_user=app_dist['USER'],
                db_password=app_dist['PASSWORD'],
                # 创建备份文件名
                backup_file = f"{backup_folder}/{db_name}_{now}.sql"
                # 执行备份命令
                cmd=f"mysqldump -u{db_user[0]} -p{db_password[0]}  --default-character-set=utf8 --databases {db_name} > {backup_file}"
                print(cmd)
                os.system(cmd)
                app_dist['LASTBACKUPTIME']=datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
                # 当退出程序时保存数据到json文件里面
                with open(os.path.join(basePath, 'my.json'), 'w',
                          encoding='utf8') as fp:
                    json.dump(app_dist, fp, ensure_ascii=False)
class 操作_sql():
    def __init__(self):
        # 打开数据库连接
        try:
            self.db = sqlite3.connect(app_dist['sqlFilePath'],
                                 )
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = self.db.cursor()

        except:
            pass



    def query_one(self,sql,params=(),cursor_type=None):
        db=self.db
        if db:
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = db.cursor()
            try:
                # 使用 execute()  方法执行 SQL 查询

                cursor.execute(sql.replace('%s','?'),params)
            except Exception as e:
                return False, f"数据连接错误{e}", "", ""

            # 使用 fetchone() 方法获取单条数据.
            data = cursor.fetchall()
            #获取字段名称
            fields=[field[0] for field in cursor.description]

            # 关闭数据库连接
            db.close()
            # bool,message,data

            return True,"成功",data,fields
        else:
            return False,"数据连接错误","",""
    def alt_one(self,sql,params=()):
        db=self.db
        if db:
            # 使用cursor()方法获取操作游标
            cursor = db.cursor()

            # SQL 插入语句
            try:
                # 执行sql语句
                cursor.execute(sql.replace('%s','?'),params)
                # 提交到数据库执行
                db.commit()
                # 关闭数据库连接
                db.close()
                return True, f"执行成功"
            except Exception as e:
                # 如果发生错误则回滚
                db.rollback()
                # 关闭数据库连接
                db.close()
                return False, f"执行失败\n代码为{e}"


    def alt_many(self,sql_all):
        db = self.db
        if db:
            # 使用cursor()方法获取操作游标
            cursor = db.cursor()

            # SQL 插入语句
            try:
                # 执行sql语句
                for sql in sql_all:
                    cursor.execute(sql[0].replace('%s','?'),sql[1])
                # 提交到数据库执行
                db.commit()
                # 关闭数据库连接
                db.close()
                return True, f"执行成功"
            except Exception as e:
                # 如果发生错误则回滚
                db.rollback()
                # 关闭数据库连接
                db.close()
                return False, f"执行失败\n代码为{e}"

    def backup(self):
        '''备份'''
        if app_dist['BACKUPID']=='127.0.0.1':
            lasttime = app_dist['LASTBACKUPTIME']
            #获取当前时间比备份时间晚5天就备份一次
            if (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y-%m-%d_%H-%M-%S') >= lasttime:
                # 获取当前时间
                now = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')

                backup_folder=basePath+'/backup_folder'
                db_name='backup'

                # 创建备份文件名
                backup_file = f"{backup_folder}/{db_name}_{now}.db"
                # 执行备份命令
                shutil.copy(app_dist['sqlFilePath'],backup_file)
                app_dist['LASTBACKUPTIME']=datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
                # 当退出程序时保存数据到json文件里面
                with open(os.path.join(basePath, 'my.json'), 'w',
                          encoding='utf8') as fp:
                    json.dump(app_dist, fp, ensure_ascii=False)
if __name__=='__main__':
    sql=f"""
    CREATE TABLE `质量标准` (
  `编号` int unsigned NOT NULL ,
  `品名` CHAR(50) NOT NULL,
  `执行标准` CHAR(50) NOT NULL
 
   );
    
    """
    a=操作_sql().alt_one(sql,())
    print(a)